24055
14059
Закрыто. Этот вопрос требует подробностей или ясности. В настоящее время он не принимает ответы.
Хотите улучшить этот вопрос? Добавьте подробности и проясните проблему, отредактировав этот пост.
Закрыт 1 год назад.
Уточните этот вопрос
Я выполняю некоторую задачу по коду и хочу получить первые 3 значения из моего массива, указав начальный индекс и получив только первые (3 или могут быть любой длины) значения из начального индекса.
Я пробовал этот код, и он работает, но структура кода слишком длинная, так как я могу сделать ее короче, чтобы ее было легко понять.
int n = 10;
двойная подпись = новый двойной [] {1, 1, 1};
двойной [] ret = новый двойной [n];
двойная сумма = 0;
ret [0] = подпись [0];
ret [1] = подпись [1];
ret [2] = подпись [2];
int x, i;
for (i = 0; i 
                                
Используя LINQ, вы можете попробовать что-то вроде этого:
значения var = array.Skip (индекс)
.Take (n)
.ToArray ();
Где index - это индекс первого элемента, а n - количество элементов, которые вы хотите выбрать.
Например. https://dotnetfiddle.net/Pk1rwY
В качестве примечания. Использование LINQ не означает, что ваш код будет быстрее. Он был бы более компактным / читаемым и т. Д. Чтобы оценить производительность вашего кода, вам нужно использовать что-то вроде BenchmarkDotNet.
|
Нет решения Linq:
private static T [] Extract  (T [] source, int fromIndex, int length) {
если (null == источник)
выбросить новое исключение ArgumentNullException (nameof (источник));
иначе если (fromIndex <0)
выбросить новое исключение ArgumentOutOfRangeException (nameof (fromIndex),
«Индекс From должен быть неотрицательным»);
иначе, если (длина <0)
выбросить новое исключение ArgumentOutOfRangeException (nameof (length),
«Длина должна быть неотрицательной»);
if (fromIndex> = source.Length || length == 0)
вернуть новый T [0];
T [] результат = новый T [Math.Min (length, source.Length - fromIndex)];
Array.Copy (источник, fromIndex, результат, 0, result.Length);
вернуть результат;
}
потом
двойная [] подпись = новая двойная [] {0, 1, 2, 3, 4, 5};
double [] ret = Извлечь (подпись, 3, 2);
Console.Write (string.Join (",", ret));
Итог:
3, 4
|
Из вашего вопроса нужно воспользоваться операторами .Take и .Skip.
var result = array.Skip (startIndex) .Take (numberOfElements);
Таким образом, из вашего кода кажется, что вы пытаетесь сделать что-то немного другое, а именно суммирование элементов. Здесь может помочь оператор .Sum.
|
Не тот ответ, который вы ищете? Посмотрите другие вопросы с метками c # массивы linq или задайте свой вопрос.